<?php namespace Common\Model;
use Hdphp\Model\Model;
/**
* 商品表模型
* 田昭鹏
*/
class Goods extends Model{
	// 指定操作的表
	protected $table='goods';
	// 自动验证
	protected $validate=array(
		array('gname','required','商品名称不能为空',3,3),
		array('gnumber','unique','该货号已存在',3,3)
		);
	// 自动完成
	protected $auto=array(
		// 上架时间
		array('gtime','time','function',3,1),
		// 管理员id
		array('auser_aid','aid','method',3,3),
		// 图片地址
		array('pic','pic','method',3,3)
		);
	// 自动完成管理员id
	public function aid(){
		return $_SESSION['aid'];
	}
	//图片地址
	public function pic(){
		// 判断是否存在
		if(Q("post.pic")){
			// 接收图片地址数组，返回字符串
			return implode('|', Q("post.pic"));
		};
		return '';
	}
	// 添加方法
	public function store(){
		// p($_POST);die;
		// 自动验证
		if(!$this->create()) return FALSE;
		// 添加goods表  返回gid
		$gid=$this->add();


		// 添加detail表
		$detail=new Detail;
			// 自动验证 跳转至detail模型
		if(!$detail->create()) return FALSE;
			// 添加商品id
		$detail->data['goods_gid']=$gid;
			// 添加
		$detail->add();


		// 添加商品属性表shop_attr
		$attrData=new GoodsAttr;
		// 重组数组  属性
		$attr=array();
		if(Q('post.attr')){
			foreach (Q('post.attr') as $k => $v) {
				if(!$v) continue;
				$attr['gavalue']=$v;
				$attr['goods_gid']=$gid;
				$attr['type_attr_taid']=$k;
				// 添加
				$attrData->add($attr);
			}
		}
		
		// 重组数组  规格
		$spec=array();
		if(Q('post.spec')){
			foreach (Q('post.spec') as $k => $v) {
				// 判断是否是数组
				if(!is_array($v['gavalue'])) return;
				foreach ($v['gavalue'] as $kk => $vv) {
					if(!$v) continue;
					$spec['gavalue']=$v['gavalue'][$kk];
					$spec['addprice']=$v['addprice'][$kk];
					$spec['goods_gid']=$gid;
					$spec['type_attr_taid']=$k;
					// 添加
					$attrData->add($spec);
				}
			}
		}
		

		
		// 返回值
		return TRUE;
	}

	// 编辑方法
	public function edit(){
		// 自动验证
		$this->validate=array(
			array('gname','required','商品名称不能为空',3,3),
		);
		if(!$this->create()) return FALSE;
		// 修改goods表  
		$this->save();

		// 修改detail表
		$detail=new Detail;
		// 获得gid主键
		$gid=Q('post.gid',0,'intval');
			// 自动验证 跳转至detail模型
		if(!$detail->create()) return FALSE;
		// 添加did
		$detail->data['did']=$gid;
			// 修改
		$detail->save();


		// 修改商品属性表shop_attr   先删除再添加
		$attrData=new GoodsAttr;
		// 删除原有属性
		$attrData->where('goods_gid',$gid)->delete();
		// 重组数组  属性
		$attr=array();
		if(Q('post.attr')){
			foreach (Q('post.attr') as $k => $v) {
				if(!$v) continue;
				$attr['gavalue']=$v;
				$attr['goods_gid']=$gid;
				$attr['type_attr_taid']=intval($k);
				// 添加
				$attrData->add($attr);
			}
		}
		
		// 重组数组  规格
		$spec=array();
		if(Q('post.spec')){
			foreach (Q('post.spec') as $k => $v) {
				// 判断是否是数组
				if(!is_array($v['gavalue'])) return;
				foreach ($v['gavalue'] as $kk => $vv) {
					if(!$vv) continue;
					$spec['gavalue']=$v['gavalue'][$kk];
					$spec['addprice']=$v['addprice'][$kk];
					$spec['goods_gid']=$gid;
					$spec['type_attr_taid']=intval($k);
					// 添加
					$attrData->add($spec);
				}
			}
		}
		
		// 返回值
		return TRUE;
	}

	// 获得其他分类
	public function getCategory($allData,$cid,$tid){
		// 找到当前传入cid的子集
		$sonCid=$this->getSon($allData,$cid);
		// 把自己压入数组
		$sonCid[]=$cid;
		// 判断不在数组中的分类
		$getData=$this->whereNotIn('cid',$sonCid)->get();
		// 返回数组信息
		return Data::tree($getData,'cname');
	}
	// 获得子集方法
	private function getSon($allData,$cid){
		// 声明一个数组
		$temp=array();
		// 循环添加
		foreach ($allData as $k => $v) {
			// 如果cid等于pid就添加
			if($cid==$v['pid']){
				// 压入数组
				$temp[]=$v['cid'];
				// 递归继续循环
				$temp=array_merge($temp,$this->getSon($allData,$v['cid']));
			}
		}
		// 返回数组
		return $temp;
	}



	// 删除方法
	public function del($cid){
		// 判断改分类中书否有子元素存在
		$result=$this->where('pid',$cid)->get();
		if($result){
			$this->error='该分类中存在子元素！';
			return FALSE;
		}else{
			// 删除数据库内容
			$result=$this->where('cid',$cid)->delete();
		}
		return TRUE;
	}

}





 ?>